(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
/**
 * 设置色值透明度：输入色值和透明度，返回符合透明度的新色值
 * 
 * @memberof color
 * 
 * @param {String} color 色值(必传)
 * <br />支持格式：hex,rgb,rgba
 * 
 * @param {Number} opacity 透明度(可选) 
 * <br />范围:0 - 1
 * 
 * @returns  rgba 格式色值
 * 
 * @example  
 * setColorOpacity('#fff',0.5); // rgba(255,255,255,0.5)
 */
function setColorOpacity(color, opacity) {
    let c = color;
    // to varify color format
    const regHex = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
    const regRGB =
        /^rgb\(([0-9]|[0-9][0-9]|25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9])\,([0-9]|[0-9][0-9]|25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9])\,([0-9]|[0-9][0-9]|25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9])\)$/i;
    const regRGBA =
        /^rgba\(([0-9]|[0-9][0-9]|25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9])\,([0-9]|[0-9][0-9]|25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9])\,([0-9]|[0-9][0-9]|25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9])\,(1|1.0|0.[0-9])\)$/i;

    // if hex，transform to rgb
    if (regHex.test(c)) {
        c = c.length === 4 ? c + c.slice(1, 4) : c // #000 格式补全6位
        const red = parseInt("0x" + c.slice(1, 3))
        const green = parseInt("0x" + c.slice(3, 5))
        const yellow = parseInt("0x" + c.slice(5, 7))
        c = `rgb(${red},${green},${yellow})`
    }

    // if rgb，transform to  rgba
    if (regRGB.test(c)) {
        const rgb = c.match(regRGB);
        c = `rgba(${rgb[1]},${rgb[2]},${rgb[3]},1)`
    }

    // if rgba , return color with opacity
    if (regRGBA.test(c)) {
        const rgba = c.match(regRGBA);
        if (opacity || opacity === 0) {
            return `rgba(${rgba[1]},${rgba[2]},${rgba[3]},${opacity})`
        } else {
            return c
        }
    } else {
        return 'wrong color value'
    }
}
module.exports.setColorOpacity = setColorOpacity
/**
 * 获取一组数的最大值
 * 
 * @memberof data
 * 
 * @param {Array} value 数据数组(必传)
 * <br /> 支持格式：[1,2,3] 和
 * <br /> [{name:'zhangsan',value:10},{name:'lisi',value:20}]
 * 
 * @param {String} key json数据的 key 值（可选）
 * <br /> 默认为 value 
 * 
 * @returns 数据最大值
 * 
 * @example  
 * getMax([1,2,3]); // 3
 * getMax([{name:'zhangsan',value:10},{name:'lisi',value:20}],value); // 20
 */
function getMax(value, key) {
    let v = value;
    const {
        isType
    } = this
    key = key || 'value'
    let max = - Infinity;
    if (v instanceof Array) {
        v.forEach(item => {
            if (isType(item, 'Object')) {
                max = (item[key] || - Infinity) > max ? item[key] : max
            }
            if (isType(item, 'Number')) {
                max = (item || - Infinity) > max ? item : max
            }
        })
    }
    return max
}
/**
 * 获取一组数的最小值
 * 
 * @memberof data
 * 
 * @param {Array} value 数据数组(必传)
 * <br /> 支持格式：[1,2,3] 和
 * <br /> [{name:'zhangsan',value:10},{name:'lisi',value:20}]
 * 
 * @param {String} key json数据的 key 值（可选）
 * <br /> 默认为 value 
 * 
 * @returns 数据最小值
 * 
 * @example  
 * getMin([1,2,3]); // 1
 * getMin([{name:'zhangsan',value:10},{name:'lisi',value:20}],value); // 10
 */
function getMin(value, key) {
    let v = value;
    const {
        isType
    } = this
    key = key || 'value'
    let min = Infinity;
    if (v instanceof Array) {
        v.forEach(item => {
            if (isType(item, 'Object')) {
                min = (item[key] || Infinity) < min ? item[key] : min
            }
            if (isType(item, 'Number')) {
                min = (item || Infinity) < min ? item : min
            }
        })
    }
    return min
}
/**
 * 获取一组数的总值
 * 
 * @memberof data
 * 
 * @param {Array} value 数据数组(必传)
 * <br /> 支持格式：[1,2,3] 和
 * <br /> [{name:'zhangsan',value:10},{name:'lisi',value:20}]
 * 
 * @param {String} key json数据的 key 值（可选）
 * <br /> 默认为 value 
 * 
 * @returns 数据总值
 * 
 * @example  
 * getTotal([1,2,3]); // 6
 * getTotal([{name:'zhangsan',value:10},{name:'lisi',value:20}],value); // 30
 */
function getTotal(value, key) {
    let v = value;
    const {
        isType
    } = this
    key = key || 'value'
    let total = 0;
    if (v instanceof Array) {
        v.forEach(item => {
            if (isType(item, 'Object')) {
                total += item[key] || 0
            }
            if (isType(item, 'Number')) {
                total += item || 0
            }
        })
    }
    return total 
}
module.exports.getMax = getMax
module.exports.getMin = getMin
module.exports.getTotal = getTotal
/**
 * json数组合并为json
 * 
 * @memberof data
 * 
 * @param {Array} json数组
 * 
 * @returns 合并后的 json 
 * 
 * @example  
 * toJson({name:['zhangsan','lisi'],value:[10,20]}); 
 * // [{name:'zhangsan',value:10},{name:'lisi',value:20}],value
 */
function toArray(json,fmt) {
    fmt = fmt || {key:'name',value:'value'}
    
    const { isType } = this
    
    if(!isType(json,'Object')){
        console.warn('function toArray() input value should be json')
        return json
    }
    
    let array =  []
    json[fmt.key].forEach((item,index)=>{
        let j = {}
        j[fmt.key] = item 
        j[fmt.value] = json[fmt.value][index] || undefined 
        array.push(j)
    })
    
    return array
}
/**
 *  json拆分为json数组
 * 
 * @memberof data
 * 
 * @param {Array} json
 * 
 * @returns 拆分后的 json数组
 * 
 * @example  
 * toArray([{name:'zhangsan',value:10},{name:'lisi',value:20}],value);
 * // {name:['zhangsan','lisi'],value:[10,20]}
 */
function toJson(array) {
    let json = {}
    const { isType } = this
    
    if(!isType(array,'Array')){
        console.warn('function toArray() input value should be Array')
        return json
    }
    
    array.forEach(item=>{
        for(let i in item){
            if(json[i]){
                json[i].push(item[i])
            }else{
                json[i] = [item[i]]
            }
        }
    })
    
    return json
}
module.exports.toArray = toArray
module.exports.toJson = toJson

/**
 * 将 Date 格式的日期格式化为字符串
 * 
 * @memberof date
 * 
 * @param {Date} date 日期(必传)
 * 
 * @param {String} fmt 字符串格式（可选）
 * <br /> 默认为 yyyy-MM-dd hh:mm:ss 
 * <br /> 可通过 fmt 获取年月日，如传入 MM 获取日期月份 
 * 
 * @returns 日期字符串
 * 
 * @example  
 * dateFormat(new Date()); // 2021-02-01 10:08:38
 * dateFormat(new Date(),'MM'); // 02
 */
function dateFormat(date, fmt) {
    const {isType} = this;
    if(!isType(date,'Date')){
        return 'date needs to be Date()'
    }
    fmt = fmt || 'yyyy-MM-dd hh:mm:ss'
    const o = {
        'M+': date.getMonth() + 1,
        'd+': date.getDate(),
        'h+': date.getHours(),
        'm+': date.getMinutes(),
        's+': date.getSeconds()
    }
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    for (const k in o) {
        if (new RegExp(`(${k})`).test(fmt)) {
            const str = o[k] + ''
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : ('00' + str).substr(str.length))
        }
    }
    return fmt
}
/**
 * 计算一个基于指定日期的新日期
 * 
 * @memberof date
 * 
 * @param {Number} hour 小时(必传)
 * <br /> 要计算的新日期和指定日期的小时差
 * <br /> + 代表以后的日期，- 代表以前的日期
 * <br /> 默认为0
 * 
 * @param {Date} base 指定日期（可选）
 * <br /> 默认为 new Date()
 * 
 * @returns Date 格式的日期
 * 
 * @example  
 * getDate(-2); // 2021-02-01T04:41:44.781Z
 * getDate(24 * 3, new Date('2020-10-10')); // 2020-10-13T00:00:00.000Z
 */
function getDate(hour, base) {
    hour = hour || 0
    base = base || new Date()
    const {isType} = this;
    if(!isType(base,'Date')){
        return 'base needs to be Date()'
    }
    const baseTime  = base.getTime()
    const newTime =  baseTime + hour * (3600 * 1000)
    return new Date(newTime)
}
module.exports.dateFormat = dateFormat
module.exports.getDate = getDate
/**
 * 判断数据类型：输入数据和数据类型，判断是否一致
 * 
 * @memberof is
 * 
 * @param {Any} value 数据（必传）
 * 
 * @param {String} type 类型（必传）
 * <br /> 可选：Array，Object，Number,String,Boolean,Undefined,Null,Function
 * 
 * @returns true or false
 * 
 * @example  
 * isType(1,'Number'); // true
 */
function isType(value, type) {
    if (Object.prototype.toString.call(value).indexOf(type) !== -1) {
        return true
    } else {
        return false
    }
}
/**
 * 判断号码是否为手机号
 * 
 * @memberof is
 * 
 * @param {String} number 手机号（必传）
 * 
 * @returns true or false
 * 
 * @example  
 * isPhone('1111111111'); // false
 * isPhone('18453076019'); // true
 */
function isPhone(number) {
    if (!number) return false
    if (/^1[3|4|5|7|8]\d{9}$/.test(number)) {
        return true;
    } else {
        return false;
    }

}
/**
 * 判断号码是否为身份证号，参考https://www.jb51.net/article/136639.htm
 * 
 * @memberof is
 * 
 * @param {String} number 身份证号（必传）
 * 
 * @returns true or false
 * 
 * @example  
 * isIDCard('111111111111111111'); // false
 * isIDCard('372922199905032335'); // true
 */
function isIDCard(number) {
    // 格式和校验码计算
    const checkCode = function (val) {
     const p = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
     const factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
     const parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
     let code = val.substring(17);
     if(p.test(val)) {
      let sum = 0;
      for(let i=0;i<17;i++) {
       sum += val[i]*factor[i];
      }
      if(parity[sum % 11] == code.toUpperCase()) {
       return true;
      }
     }
     return false;
    }
    // 检验省份代码
    const checkProv = function (val) {
     const pattern = /^[1-9][0-9]/;
     const provs = {11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门"};
     if(pattern.test(val) && provs[val]) {
        return true;
     }
     return false;
    }
    // 校验出生日期
    const checkDate = function (val) {
     const pattern = /^(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)$/;
     if(pattern.test(val)) {
         return true;
     }else{
         return false;
     }
    }
    
    // 身份证号校验
     if(checkCode(number)&&checkProv(number.substring(0,2))&&checkDate(number.substring(6,14))) {
         return true
     }
     return false;
}
module.exports.isType = isType
module.exports.isPhone = isPhone
module.exports.isIDCard = isIDCard

},{}],2:[function(require,module,exports){
const libs = require('./export.js')
function JsLibs(){
    this.version = 'v1.0.0'
    this._v = 'v1.3.2'
}
// 将函数挂载到 JsLibs 的 prototype 上
for(let method in libs){
        JsLibs.prototype[method] = libs[method]
}

// const $ = new JsLibs();

// console.log($.toJson([{name:'zhangsan',value:10,age:20},{name:'lisi',value:20,sex:'1'}]))  // 34

module.exports = new JsLibs()
},{"./export.js":1}],3:[function(require,module,exports){
const jsLibs = require('../index.js')
console.log(jsLibs,'jsLibs')
console.log(jsLibs.dateFormat(jsLibs.getDate(2)))

},{"../index.js":2}]},{},[3]);
